home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / printing / prtpik / duprt.bas < prev    next >
BASIC Source File  |  1995-05-02  |  6KB  |  213 lines

  1. Option Explicit
  2.  
  3. Dim tfPrintCancelled As Integer
  4.  
  5. Type typWindowsDevice
  6.    sWindowsDeviceUserName As String
  7.    sWindowsDeviceShortName As String
  8.    sWindowsDevicePortName As String
  9. End Type
  10.  
  11. Const sWINDOWS_SECTION_NAME = "windows"
  12. Const sDEVICES_SECTION_NAME = "devices"
  13. Const sDEVICE_KEY_NAME = "device"
  14.  
  15. Declare Function duprt_nAbortDoc Lib "GDI" Alias "AbortDoc" (ByVal hDC As Integer) As Integer
  16. Declare Function duprt_nSetSysModalWindow Lib "User" Alias "SetSysModalWindow" (ByVal hWnd As Integer) As Integer
  17.  
  18. Sub duprt_BeginDoc ()
  19.  
  20. 'This routine must be called at the beginning of the print
  21. 'job to initialize the "cancel" flag and popup the status
  22. 'window.
  23.  
  24. Dim nRC As Integer
  25.  
  26.  
  27. 'Initialize the "cancel" flag.
  28.  
  29. tfPrintCancelled = False
  30.  
  31. 'Display the status window.  Note that as far as VB is concerned,
  32. 'the window is not MODAL.  This is what allows the print job to
  33. 'proceed in the "background".
  34.  
  35. Load frmPrt
  36. frmPrt.Move (Screen.Width - frmPrt.Width) / 2, (Screen.Height - frmPrt.Height) / 2
  37. frmPrt.Show
  38.  
  39. 'Tell Windows to treat the status window as "System Modal".
  40.  
  41. nRC = duprt_nSetSysModalWindow(frmPrt.hWnd)
  42.  
  43. End Sub
  44.  
  45. Sub duprt_CancelDoc ()
  46.  
  47. 'This routine should be called if the user cancels the
  48. 'print job, to flush it from the print queue.
  49.  
  50. Dim nRC As Integer
  51.  
  52.  
  53. If tfPrintCancelled Then
  54.    'do nothing; shouldn't call this routine
  55.    'more than once per print job.
  56. Else
  57.    'Flush the output from the print queue.
  58.  
  59.    nRC = duprt_nAbortDoc(Printer.hDC)
  60.  
  61.    'Close the Printer object.  Error-trapping is
  62.    'mandatory here, because the Printer object and
  63.    'the AbortDoc API function don't always get along.
  64.  
  65.    On Error Resume Next
  66.  
  67.    Printer.EndDoc
  68.  
  69.    On Error GoTo 0
  70.    
  71.    'Set the "cancel" flag
  72.  
  73.    tfPrintCancelled = True
  74. End If
  75.  
  76. End Sub
  77.  
  78. Sub duprt_EndDoc ()
  79.  
  80. 'This routine should always be called at the end of the
  81. 'print job to close the status window, whether the user
  82. 'cancels the output or not.
  83.  
  84.  
  85. If tfPrintCancelled Then
  86.    'do nothing; shouldn't call this routine
  87.    'more than once per print job.
  88. Else
  89.    'Close the print job.
  90.  
  91.    Printer.EndDoc
  92. End If
  93.  
  94. 'Close the status window.
  95.  
  96. frmPrt.Hide
  97. Unload frmPrt
  98.  
  99. Set frmPrt = Nothing
  100.  
  101. End Sub
  102.  
  103. Sub duprt_GetDefaultPrinter (recDefaultPrinter As typWindowsDevice)
  104.  
  105. 'This routine returns the "default" Windows printer.
  106.  
  107. Dim nStrPos As Integer
  108. Dim sDefaultPrinter As String
  109. Dim nRC As Integer
  110.  
  111.  
  112. sDefaultPrinter = duini_sGetString(sWINDOWS_SECTION_NAME, sDEVICE_KEY_NAME, "", "")
  113. nStrPos = InStr(sDefaultPrinter, ",")
  114.  
  115. recDefaultPrinter.sWindowsDeviceUserName = Left$(sDefaultPrinter, nStrPos - 1)
  116.  
  117. sDefaultPrinter = Mid$(sDefaultPrinter, nStrPos + 1)
  118. nStrPos = InStr(sDefaultPrinter, ",")
  119.  
  120. recDefaultPrinter.sWindowsDeviceShortName = Left$(sDefaultPrinter, nStrPos - 1)
  121. recDefaultPrinter.sWindowsDevicePortName = Mid$(sDefaultPrinter, nStrPos + 1)
  122.  
  123. End Sub
  124.  
  125. Sub duprt_GetInstalledPrinters (recInstalledPrinters() As typWindowsDevice)
  126.     
  127. 'This routine enumerates the "installed" Windows printers.
  128.  
  129. Dim nStrPos As Integer, nPrtSub As Integer
  130. Dim sInstalledPrinter As String
  131. ReDim sPrinterNames(0) As String
  132.  
  133.  
  134. Call duini_GetKeyNames(sDEVICES_SECTION_NAME, sPrinterNames(), "")
  135.  
  136. ReDim recInstalledPrinters(UBound(sPrinterNames))
  137.     
  138. For nPrtSub = 1 To UBound(sPrinterNames)
  139.    sInstalledPrinter = duini_sGetString(sDEVICES_SECTION_NAME, sPrinterNames(nPrtSub), "", "")
  140.    nStrPos = InStr(sInstalledPrinter, ",")
  141.  
  142.    recInstalledPrinters(nPrtSub).sWindowsDeviceUserName = sPrinterNames(nPrtSub)
  143.    recInstalledPrinters(nPrtSub).sWindowsDeviceShortName = Left$(sInstalledPrinter, nStrPos - 1)
  144.  
  145.    sInstalledPrinter = Mid$(sInstalledPrinter, nStrPos + 1)
  146.    nStrPos = InStr(sInstalledPrinter, ",")
  147.  
  148.    If nStrPos > 0 Then
  149.       recInstalledPrinters(nPrtSub).sWindowsDevicePortName = Left$(sInstalledPrinter, nStrPos - 1)
  150.    Else
  151.       recInstalledPrinters(nPrtSub).sWindowsDevicePortName = sInstalledPrinter
  152.    End If
  153. Next
  154.  
  155. End Sub
  156.  
  157. Sub duprt_SetDefaultPrinter (recDefaultPrinter As typWindowsDevice)
  158.     
  159. 'This routine sets the "default" Windows printer to one
  160. 'of the "installed" printers.
  161.  
  162. Dim sNewPrinter As String
  163. Dim nRC As Integer
  164.  
  165.  
  166. sNewPrinter = recDefaultPrinter.sWindowsDeviceUserName + "," + recDefaultPrinter.sWindowsDeviceShortName + "," + recDefaultPrinter.sWindowsDevicePortName
  167.     
  168. Call duini_WriteString(sWINDOWS_SECTION_NAME, sDEVICE_KEY_NAME, sNewPrinter, "")
  169. Call duini_WININIChange(sWINDOWS_SECTION_NAME)
  170.  
  171. End Sub
  172.  
  173. Sub duprt_StatusDoc (sPrintCaption As String, sPrintDesc As String, sPrintStatus As String)
  174.  
  175. 'This routine updates the status window with new
  176. 'information, to show the progress of the print job.
  177.  
  178. If Len(sPrintCaption) > 0 Then
  179.    frmPrt.Caption = sPrintCaption
  180.    frmPrt.Refresh
  181. End If
  182.  
  183. If Len(sPrintDesc) > 0 Then
  184.    frmPrt.lblPrintDesc.Caption = sPrintDesc
  185.    frmPrt.lblPrintDesc.Refresh
  186. End If
  187.  
  188. If Len(sPrintStatus) > 0 Then
  189.    frmPrt.lblPrintStatus.Caption = sPrintStatus
  190.    frmPrt.lblPrintStatus.Refresh
  191. End If
  192.  
  193. End Sub
  194.  
  195. Function duprt_tfPrintCancelled () As Integer
  196.  
  197. 'This routine checks to see if the print job has been
  198. 'cancelled.  It should be called periodically by your
  199. 'application's print routine.
  200.  
  201.  
  202. 'Allow queued events to be processed, so a click on
  203. 'the Cancel button will be recognized.
  204.  
  205. DoEvents
  206.  
  207. 'Return the status of the "cancel" flag.
  208.  
  209. duprt_tfPrintCancelled = tfPrintCancelled
  210.  
  211. End Function
  212.  
  213.